﻿package com.eitb.programas.diputacion{
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.utils.*;
	import flash.media.*;
	import fl.data.DataProvider;
	import com.eitb.cargadores.*;
	import com.eitb.colecciones.*;
	import com.eitb.formaters.*;
	import com.eitb.literales.*;
	import com.eitb.reproductores.*;
	import com.eitb.imagenes.*;
	import com.eitb.programas.diputacion.rutas.*;
	import com.eitb.programas.diputacion.entidades.*;
	import com.eitb.programas.diputacion.literales.*;
	import com.eitb.util.logging.*;
	
public class ModeloIntermedio implements IControladorCargador,IControladorIntermedio {
		
		private var vIntermedio:IVistaIntermedio;
		private var vMain:Main;
		private var categorias:Array;
		private var xmlData:XMLList;
		private var buttons:Array;
		private var labels:Array;
		private var literales:ILiterales;
		
		public function ModeloIntermedio() {
			this.categorias=new Array();
			this.labels=new Array();
			this.buttons=new Array();
			/*Inicializamos 20 botones en total.*/
			this.initButtons(20);
		}
		
		public function initLiterales(literales:ILiterales) {
			this.literales=literales;
			this.vIntermedio.setCabeceraDirectoText(this.literales.getLiteral(DiputacionLiterales.INTERMEDIA_CABECERA_DIRECTO));
			
		}
		
		private function initButtons(num:int):void {
			var i:int;
 			for (i = 1; i <=num; i++) { 
     			var buttonId:String = "btCat" + i;
				var labelId:String = "text"+i;
				var dp:DataProvider = new DataProvider();
				dp.addItem({button:buttonId,label:labelId,value:""});
				this.buttons[buttonId] = dp;
				this.labels[labelId] = dp;
 			}
		}
		
		public function initXmlData(xmlData:XMLList) {
			this.xmlData=xmlData;
			for each (var xmlCat:XML in xmlData..proyecto) {
				var categoria:Categoria=new Categoria() ;
				var imagenes:Array=new Array  ;
				categoria.setOrden(xmlCat.orden);
				categoria.setTipo(xmlCat.tipo);
				categoria.setName(xmlCat.categoria);
				categoria.setSumario(xmlCat.sumario);
				categoria.setDescripcion(xmlCat.descripcion);
				categoria.setPdf(xmlCat.pdf);
				categoria.setAudio(xmlCat.audio);
				categoria.setVideo(xmlCat.video);
				for each (var imagen:String in xmlCat.imagenes..imagen) {
					imagenes.push(imagen);
				}
				categoria.setImagenes(imagenes);
				this.categorias.push(categoria);
			}
			this.categorias.sort(sortOnOrden);
		}
		
		private function sortOnOrden(a:Categoria, b:Categoria):Number {
    		var aOrden:Number = a.getOrden();
    		var bOrden:Number = b.getOrden();
    		if(aOrden > bOrden) {
        		return 1;
    		} else if(aOrden < bOrden) {
        		return -1;
    		} else  {
        		return 0;
    		}
		}
		
		public function start():void {
			// inicia los botones que representan las categorias.
			var count:int = 1;
			var index:int = 0;
			//Primero se crean las categorias de tipo directo.
			for each (var categoria:Categoria in this.categorias) {
				//this.vIntermedio.debug(categoria.getName());
				var dp:DataProvider = this.buttons["btCat"+count];
				dp.getItemAt(0)['value'] = categoria.getName();
				dp.getItemAt(0)['index'] = index;
				if(categoria.getTipo() == "directo") {
					this.vIntermedio.crearCategoria(count,dp.getItemAt(0).value, categoria.getTipo());
					count++;
				}
				index++;
			}
			
			//Segundo se crean las categorias de tipo indirecto.
			index = 0;
			for each (var category:Categoria in this.categorias) {
				//this.vIntermedio.debug(categoria.getName());
				var dp2:DataProvider = this.buttons["btCat"+count];
				dp2.getItemAt(0)['value'] = category.getName();
				dp2.getItemAt(0)['index'] = index;
				if(category.getTipo() == "indirecto") {
					this.vIntermedio.crearCategoria(count,dp2.getItemAt(0).value, category.getTipo());
					count++;
				}
				index++;
			}
		}
		
		
		// INIT COMPONENTES
		public function initVista(vIntermedio:IVistaIntermedio):void {
			this.vIntermedio=vIntermedio;
		}
		
		public function initMain(vMain:Main):void {
			this.vMain=vMain;
		}
		
		//Override from IControladorCargador
		public function addElementos(numero:int):void {

		}
		//Override from IControladorCargador
		public function removeElementos(numero:int):void {

		}
		
		//Override from IControladorIntermedio
		public function onCategoryBtnClick(evt:MouseEvent):void {
			var dp:DataProvider = this.buttons[evt.target.name];
			this.vMain.startPortada(dp.getItemAt(0)['value']);
		}
		
		public function onCategoryLabelClick(evt:MouseEvent):void {
			var dp:DataProvider = this.labels[evt.target.name];
			this.vMain.startPortada(dp.getItemAt(0)['value']);
		}
		
		public function onCategoryDirectBtnClick(evt:MouseEvent):void {
			var dp:DataProvider = this.buttons[evt.target.name];
			var categoria:Categoria = this.categorias[dp.getItemAt(0)['index']];
			this.vMain.startPresentacion(categoria);
			//trace("Categoria seleccionada: " + categoria.getName());
		}
		
		public function onCategoryDirectLabelClick(evt:MouseEvent):void {
			var dp:DataProvider = this.labels[evt.target.name];
			var categoria:Categoria = this.categorias[dp.getItemAt(0)['index']];
			//trace("Categoria seleccionada: " + categoria.getName());
			this.vMain.startPresentacion(categoria);
		}
		
		/*Funcion onCategoryDirectBtnClick
			1. Se extrae el nombre de la categoria
			  dp.getItemAt(0)['value']
			2. Se localiza en el array de categorias, aquella
			   cuyo nombre coincide con la extraida del evento.
			3. Se invoca al metodo con la categoria localizada en el paso 2
			   como parametro.
				this.vMain.startPresentacion(category);
			   Este metodo no existe, hay que crearlo.
		*/
		
	}

}